package com.bs.utits;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 自定义一拦截器
 *
 *
 */


public class AuthIntercepter implements HandlerInterceptor {
    //preHandle 在执行目标方法之前执行,而且如果返回值为true执行目标方法，如果返回false 目标方法不在执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("执行了HandlerInterceptor的preHandle方法");
        //判断session 中是否存在user
        HttpSession session = request.getSession();
        String user=  (String)session.getAttribute("user");
        //如果user 为admin 继续，否则不执行controller
        if (user != null && user.equals("admin")){
            System.out.println("返回值true");
            return true;
        }
        response.sendRedirect(request.getContextPath()+"/tologin.do");
        System.out.println("返回值false");
        return false;
    }

    //在执行postHandle 时 目标方法已经执行，但是没有返回到试图页面，再该方法中可以修改目标方法返回值的值及要跳转的路径
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("执行了HandlerInterceptor的preHandle方法");

    }

    //在执行afterCompletion 时，所有的操作已经执行完成，并且试图页面已经渲染结束，无法再去修改数据或页面，
    //该方法通常用于收尾工作，比如关闭流 释放资源 计算性能分析等等
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("执行了HandlerInterceptor的afterCompletion方法");

    }
}
